#pragma once

#if 0
namespace Graph
{
	namespace DFS
	{
		enum EdgeType
		{
			EdgeType_None,
			EdgeType_Tree,
			EdgeType_Back,
			EdgeType_Forward,
			EdgeType_Cross,
		};

		enum EdgeResult
		{
			EdgeResult_None,
			EdgeResult_Continue,
			EdgeResult_Ture,
			EdgeResult_False,
		};

		struct Callback
		{
			virtual auto checkEdgeType(EdgeType ty)->EdgeResult;
			virtual auto onSetEndTime(VertexResult* pVtxRst)->void {}
			virtual auto needReset()->bool { return true; }
			virtual auto getOrderList()->std::list<ObjId>* { return nullptr; }
		};

		struct Define : public ObjectT<Define>
		{
			Callback* _callback = nullptr;

			Define(ObjId resId, Callback* cb = nullptr);
		};

		struct Result : public ObjectT<Result>
		{
			size_t _time = 0;
			std::unordered_set<ObjId> _forest;
			std::unordered_set<ObjId> _findSet;

			bool isFinded(ObjId id) const { return _findSet.find(id) != _findSet.end(); }
		};

		struct VertexResult : public ObjectT<VertexResult>
		{
			ObjId _parent = 0;
			size_t _begTime = 0;
			size_t _endTime = 0;
			std::unordered_set<ObjId> _children;
		};
	}
}
#endif
